package com.waikuai.shop.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单详情视图对象
 * @author waikuai
 */
@Data
public class OrderDetailVO {

    /**
     * 订单ID
     */
    private Long id;

    /**
     * 订单号
     */
    private String orderNo;

    /**
     * 订单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 优惠金额
     */
    private BigDecimal discountAmount;

    /**
     * 实际支付金额
     */
    private BigDecimal actualAmount;

    /**
     * 支付方式：1-余额支付
     */
    private Integer paymentMethod;

    /**
     * 支付状态：0-未支付，1-已支付
     */
    private Integer paymentStatus;

    /**
     * 订单状态：0-待支付，1-待发货，2-配送中，3-待取件，4-已完成，5-已取消
     */
    private Integer orderStatus;

    /**
     * 收货人姓名
     */
    private String receiverName;

    /**
     * 收货人手机号
     */
    private String receiverPhone;

    /**
     * 完整收货地址
     */
    private String receiverAddress;

    /**
     * 物流单号
     */
    private String trackingNumber;

    /**
     * 物流公司
     */
    private String shippingCompany;

    /**
     * 发货时间
     */
    private LocalDateTime shippingTime;

    /**
     * 完成时间
     */
    private LocalDateTime completedTime;

    /**
     * 订单备注
     */
    private String remark;

    /**
     * 订单明细列表
     */
    private List<OrderItemVO> orderItems;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 物流信息（仅已支付订单有值）
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private LogisticsVO logistics;

    /**
     * 订单明细视图对象
     */
    @Data
    public static class OrderItemVO {
        /**
         * 订单明细ID
         */
        private Long id;

        /**
         * 商品ID
         */
        private Long productId;

        /**
         * 商品名称
         */
        private String productName;

        /**
         * 商品图片
         */
        private String productImage;

        /**
         * 单价
         */
        private BigDecimal unitPrice;

        /**
         * 数量
         */
        private Integer quantity;

        /**
         * 小计金额
         */
        private BigDecimal totalPrice;
    }
}
